package it.fantacalcio.struts.action.amministrazione.giocatore;

import java.util.ArrayList;
import java.util.List;

import it.fantacalcio.model.Giocatore;
import it.fantacalcio.model.Squadra;
import it.fantacalcio.model.User;
import it.fantacalcio.spring.service.MyServiceFactory;
import it.fantacalcio.struts.form.GiocatoreForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class PrepareCRUDGiocatoreAction extends DispatchAction {
	
	@Override
	protected ActionForward dispatchMethod(ActionMapping arg0, ActionForm arg1,
			HttpServletRequest arg2, HttpServletResponse arg3, String arg4)
			throws Exception {
		
		User userInSession = (User) arg2.getSession().getAttribute("userInSession");
		if(userInSession==null || userInSession.getAttivo().equals("NO")){
			return arg0.findForward("noninsession");
		}
		return super.dispatchMethod(arg0, arg1, arg2, arg3, arg4);
	}
	
	public ActionForward aggiungi(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		User userInSession = (User) request.getSession().getAttribute("userInSession");
		if(!userInSession.getRole().getCodRole().equals("ADMIN")){
			return mapping.findForward("noninsession");
		}
		List<Squadra> listaSquadra = new ArrayList<Squadra>();
		List<String> listaSquadraReale = new ArrayList<String>();
		try {
			listaSquadra = MyServiceFactory.getSquadraService().list();
			listaSquadraReale = MyServiceFactory.getGiocatoreService().listaSquadreReali();
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("listaSquadra", listaSquadra);
		request.setAttribute("listaSquadraReale", listaSquadraReale);
		return mapping.findForward("aggiungi");
	}
	
	public ActionForward modifica(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		User userInSession = (User) request.getSession().getAttribute("userInSession");
		if(!userInSession.getRole().getCodRole().equals("ADMIN")){
			return mapping.findForward("noninsession");
		}
		GiocatoreForm giocatoreForm=(GiocatoreForm)form;
		Long idGiocatore = Long.parseLong(request.getParameter("id"));
		Giocatore giocatore = new Giocatore();
		List<Squadra> listaSquadra = new ArrayList<Squadra>();
		List<String> listaSquadraReale = new ArrayList<String>();
		try {
			System.out.println(idGiocatore);
			giocatore = MyServiceFactory.getGiocatoreService().get(idGiocatore);
			System.out.println(giocatore);
			BeanUtils.copyProperties(giocatoreForm, giocatore);
			if(giocatore.getSquadra()!=null){
				giocatoreForm.setIdSquadra(giocatore.getSquadra().getId());
			}
			listaSquadra = MyServiceFactory.getSquadraService().list();
			listaSquadraReale = MyServiceFactory.getGiocatoreService().listaSquadreReali();
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("listaSquadra", listaSquadra);
		request.setAttribute("listaSquadraReale", listaSquadraReale);
		return mapping.findForward("modifica");
	}
	
	public ActionForward cancella(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		User userInSession = (User) request.getSession().getAttribute("userInSession");
		if(!userInSession.getRole().getCodRole().equals("ADMIN")){
			return mapping.findForward("noninsession");
		}
		Long idGiocatore = Long.parseLong(request.getParameter("id"));
		Giocatore giocatore = new Giocatore();
		try {
			giocatore = MyServiceFactory.getGiocatoreService().get(idGiocatore);
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("giocatore", giocatore);
		return mapping.findForward("cancella");
	}
	
	public ActionForward apri(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		Long idGiocatore = Long.parseLong(request.getParameter("id"));
		Giocatore giocatore = new Giocatore();
		try {
			giocatore = MyServiceFactory.getGiocatoreService().get(idGiocatore);
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("error");
		}
		request.setAttribute("giocatore", giocatore);
		return mapping.findForward("apri");
	}

}
